package lng

import "strings"

// 是否为数字 0-9
func IsDigitRune[T rune | byte](r T) bool {
	return r >= '0' && r <= '9'
}

// 判断是否为小写字母 a-z
func IsLowerRune(r rune) bool {
	return r >= 'a' && r <= 'z'
}

// 判断是否为大写字母 A-Z
func IsUpperRune(r rune) bool {
	return r >= 'A' && r <= 'Z'
}

// 判断字符串是否全为 0-9 的数字
func IsDigitStr(s string) bool {
	for _, r := range s {
		if !IsDigitRune(r) {
			return false
		}
	}
	return true
}

// 判断字符串是否全为 a-z A-Z 的字母
func IsAlphabetStr(s string) bool {
	for _, r := range s {
		if !IsLowerRune(r) && !IsUpperRune(r) {
			return false
		}
	}
	return true
}

// 判断字符串是否符合语言标签的形式：[a-zA-Z](-[a-zA-Z0-9]+)*
func IsLangTagStr(s string) bool {
	if s == "" {
		return false
	}
	for _, r := range s {
		if r == '-' || IsLowerRune(r) || IsDigitRune(r) || IsUpperRune(r) {
			continue
		}
		return false
	}
	return !IsDigitRune(s[0]) && s[:1] != "-" && s[len(s)-1:] != "-" && !strings.Contains(s, "--")
}
